// import 'dart:io';
// import 'package:csv/csv.dart';
// import 'package:flutter/material.dart';
// import 'package:heartrate_monitoring/services/WeChatRobot.dart';
// import 'package:heartrate_monitoring/services/database_service.dart';
// import 'package:heartrate_monitoring/utils/CompressionUtil.dart';
// import 'package:path_provider/path_provider.dart';
// import 'package:heartrate_monitoring/models/test_record.dart';
// import 'package:intl/intl.dart';
// import 'package:share_plus/share_plus.dart';
// import 'package:archive/archive.dart';


// class CsvExporter {
//   static DatabaseService _dbService = DatabaseService(); // 数据库服务实例
//   // 导出单次会话的心率数据
//   static Future<void> exportSessionHeartRates({
//     required BuildContext context,
//     required int sessionId,
//     required List<HeartRateData> heartRates,
//     required TestRecord? testRecord,
    
//   }) async {
//     try {
//       var info='ID:${testRecord?.name},Age:0,Height(cm):0,Sex:${testRecord?.gender},Wearing status:${testRecord?.wearingMode},'
//       'Test status:${testRecord?.activityType},deviceName:${testRecord?.deviceName},deviceBattery:${testRecord?.deviceBattery}';
//       final csvContent = buildHeartRateCsvContent(info, heartRates);
//       final fileName = generateHeartRateFileName(testRecord!);
  
//       await _shareCsv(context, csvContent, fileName);
//     } catch (e) {
//       _showError(context, e);
//     }
//   }

// ///单次数据转csv
//   static String buildHeartRateCsvContent(String info, List<HeartRateData> heartRates) {
//   // 创建 CSV 数据列表
//   final List<List<dynamic>> csvData = [];

//   // 第一行：自定义消息
//   csvData.add([info]);

//   // 第二行：列名称（表头）
//   csvData.add(['time', 'timestamp', 'heartbeat']);

//   // 第三行开始：数据
//   csvData.addAll(heartRates.map((hr) => [
//     DateFormat('yyyy-MM-dd HH:mm:ss').format(hr.timestamp), // 格式化时间
//     hr.timestamp.toUtc().millisecondsSinceEpoch,           // 时间戳
//     hr.value                                               // 心率值
//   ]));

//   // 将数据转换为 CSV 格式字符串
//   return const ListToCsvConverter().convert(csvData); 
// }
//   static String generateHeartRateFileName(TestRecord testRecord) {
//      // 定义格式：年-月-日-时-分-秒（24小时制）
//   final formatter = DateFormat('yyyy-MM-dd-HH-mm-ss');
//     var _fileName= '${testRecord.activityType}-${testRecord.wearingMode}-${testRecord.name}-${formatter.format(testRecord.startTime)}_heartbeat';
//     return _fileName;
//   }



// static Future<void> _shareCsv(BuildContext context, String content, String fileName) async {
//   final directory = await getDownloadsDirectory(); // 获取 Downloads 目录
//   final filePath = '${directory!.path}/$fileName.csv';
//   final file = File(filePath);

//   await file.writeAsString(content);
  
//  await Share.shareXFiles(
//   [XFile(filePath)],
//   text: '心率监测数据导出',
//   subject: '心率数据文件',
//   sharePositionOrigin: _getSharePosition(context),
// ).then((result) {
//   // 分享完成后执行的操作
//   ScaffoldMessenger.of(context).showSnackBar(
//     SnackBar(
//       content: Text('分享已完成，请返回应用'),
//       backgroundColor: Colors.green,
//       behavior: SnackBarBehavior.floating,
//     ),
//   );
// });
// }


// // 导出选中记录并压缩为 .7z 文件
//   static Future<void> exportSelected2({
//     required BuildContext context,
//     required Set<int> selectedIds,
//     required List<TestRecord> records,
//   }) async {
//     try {
//       final tempDir = await getTemporaryDirectory();
//       final archive = Archive();
//       final csvFiles = <File>[];

//       // 为每个选中的记录生成 CSV 文件
//       for (final id in selectedIds) {
//         final testRecord = records.firstWhere((r) => r.id == id);
//         var info='ID:${testRecord?.name},Age:0,Height(cm):0,Sex:${testRecord?.gender},Wearing status:${testRecord?.wearingMode},'
//       'Test status:${testRecord?.activityType},deviceName:${testRecord?.deviceName},deviceBattery:${testRecord?.deviceBattery}';
//         //从数据库查找数据
     
//         final heartRates = await _dbService.getHeartRates(testRecord.id!);
    
    
//         final csvContent = buildHeartRateCsvContent(info,heartRates);
//         final fileName = generateHeartRateFileName(testRecord);
//         final filePath = '${tempDir.path}/$fileName.csv';
//         final file = File(filePath);

//         await file.writeAsString(csvContent);
//         csvFiles.add(file);

//         // 将 CSV 文件添加到压缩包
//         final bytes = await file.readAsBytes();
//         archive.addFile(ArchiveFile('$fileName.csv', bytes.length, bytes));
//       }

//       // 将压缩包保存为 .7z 文件
//       final archiveBytes = ZipEncoder().encode(archive);
//       if (archiveBytes == null) {
//         throw Exception('压缩失败');
//       }

//       final archiveFilePath = '${tempDir.path}/heartrate_data.7z';
//       final archiveFile = File(archiveFilePath);
//       await archiveFile.writeAsBytes(archiveBytes);

//       // 分享压缩文件
//       await Share.shareXFiles(
//         [XFile(archiveFilePath)],
//         text: '心率监测数据导出',
//         subject: '心率数据文件',
//         sharePositionOrigin: _getSharePosition(context),
//       );

//       // 清理临时文件
//       for (final file in csvFiles) {
//         await file.delete();
//       }
//       await archiveFile.delete();
//     } catch (e) {
//       _showError(context, e);
//     }
//   }



// /// 原业务方法改造后版本
// static Future<void> exportSelected({
//   required BuildContext context,
//   required Set<int> selectedIds,
//   required List<TestRecord> records,
// }) async {
//   try {
//     final fileContents = <String, String>{};

//     // 1. 生成所有CSV文件内容
//     for (final id in selectedIds) {
//       final testRecord = records.firstWhere((r) => r.id == id);
//       final heartRates = await _dbService.getHeartRates(testRecord.id!);
      
//       // 构建文件内容
//      var info='ID:${testRecord?.name},Age:0,Height(cm):0,Sex:${testRecord?.gender},Wearing status:${testRecord?.wearingMode},'
//       'Test status:${testRecord?.activityType},deviceName:${testRecord?.deviceName},deviceBattery:${testRecord?.deviceBattery}';
     
//       final csvContent = buildHeartRateCsvContent(info, heartRates);
//       final fileName = generateHeartRateFileName(testRecord);
      
//       fileContents[fileName] = csvContent;
//     }

//     // 2. 调用压缩方法
//     final archiveFile = await CompressionUtil.createCompressedArchive(
//       fileContents: fileContents,
//       archiveName: 'heartrate_data_${DateTime.now().millisecondsSinceEpoch}',
//          onProgress: (current, total) {
        
//         }
//     );

//     // 3. 分享文件
//     await Share.shareXFiles(
//       [XFile(archiveFile.path)],
//       text: '心率监测数据导出',
//       subject: '心率数据文件',
//       sharePositionOrigin: _getSharePosition(context),
//     );

//     // 4. 清理压缩包（可选）
//     await archiveFile.delete();
//   } catch (e) {
//     _showError(context, e);
//   }
// }



// /// 推送至企业微信
// static Future<void> sendCompressedData({
//   required BuildContext context,
//   required Set<int> selectedIds,
//   required List<TestRecord> records,
// }) async {
//   try {
//     final fileContents = <String, String>{};

//     // 1. 生成所有CSV文件内容
//     for (final id in selectedIds) {
//       final testRecord = records.firstWhere((r) => r.id == id);
//       final heartRates = await _dbService.getHeartRates(testRecord.id!);
      
//       // 构建文件内容
//      var info='ID:${testRecord?.name},Age:0,Height(cm):0,Sex:${testRecord?.gender},Wearing status:${testRecord?.wearingMode},'
//       'Test status:${testRecord?.activityType},deviceName:${testRecord?.deviceName},deviceBattery:${testRecord?.deviceBattery}';
     
//       final csvContent = buildHeartRateCsvContent(info, heartRates);
//       final fileName = generateHeartRateFileName(testRecord);
      
//       fileContents[fileName] = csvContent;
//     }

//     // 2. 调用压缩方法
//     final archiveFile = await CompressionUtil.createCompressedArchive(
//       fileContents: fileContents,
//       archiveName: 'heartrate_data_${DateTime.now().millisecondsSinceEpoch}',
//          onProgress: (current, total) {
         
//         }
//     );
//     var robot = WeChatRobot();
//      // 2. 上传到企业微信
//       final mediaId = await robot.uploadFile(archiveFile.path);

//       // 3. 发送消息
//       final success = await robot.sendFile(mediaId);
   
//       if (!success) throw Exception('文件发送失败');
    
//     // 4. 清理压缩包（可选）
//     await archiveFile.delete();
//   } catch (e) {
//     _showError(context, e);
//   }
// }







//  static Rect? _getSharePosition(BuildContext context) {
//   final renderBox = context.findRenderObject() as RenderBox?;
//   if (renderBox == null) return null; // 如果 renderBox 为 null，直接返回 null
//   return renderBox.localToGlobal(Offset.zero) & renderBox.size;
// }

//   static void _showError(BuildContext context, dynamic error) {
//     ScaffoldMessenger.of(context).showSnackBar(
//       SnackBar(
//         content: Text('导出失败: ${error.toString()}'),
//         backgroundColor: Colors.red,
//         behavior: SnackBarBehavior.floating,
//       )
//     );
//   }
// }